第10章 全文搜索
一、什么是全文搜索
- 类似百度的网站,用户搜索一个关键词,根据建立的索引,查找包括关键词的相关的非结构化的数据里面有哪些包含目标关键词。
- 为什么数据库也可以搜索啊?效率低,如果在数据库里面查询,需要几乎经过全表查询,把所有的内容全部读取一遍,这样的效率非常低,二建立索引之后就可以更快的找到目标
- 所以我们需要建立一个索引,提高效率,让搜索变快!
二、建立索引
- Parser:解析数据,数据可能是html、pdf、word文档,使用相关的parser解析
- Analysis:分析token,比如有些单词是take、took、taken都是take的不同形式,需要做一个归类
- 然后根据规则,建立索引,这样就可以根据索引查询了
三、索引和反向索引
- 正向索引:正排表是以文档的ID为关键字,表中记录文档中每个字的位置信息,查找时扫描表中每个文档中字的信息直到找出所有包含查询关键字的文档。尽管正排表的工作原理非常的简单,但是由于其检索效率太低,除非在特定情况下,否则实用性价值不大。
- 反向索引(倒排索引):倒排表以字或词为关键字进行索引,表中关键字所对应的记录表项记录了出现这个字或词的所有文档,一个表项就是一个字表段,它记录该文档的ID和字符在该文档中出现的位置情况。由于每个字或词对应的文档数量在动态变化,所以倒排表的建立和维护都较为复杂,但是在查询的时候由于可以一次得到查询关键字所对应的所有文档,所以效率高于正排表。
四、Field
- 每个字段对应于在搜索期间根据索引查询或从索引检索的一段数据。
- Keyword:关键字不被分析(就是不会被拆开),而是被索引并逐字存储在索引中。
- UnIndexed:既不分析也不索引,但其值按原样存储在索引中。也就是说一旦假如通过keyword查询到了,要把unindex的部分的内容要带出来,但是这部分不索引。
- UnStored:此字段类型被分析和索引,但不存储在索引中。当然他有一些停用词列表,比如都共有的词。一般是正文,非常长不应该存在索引里面,非常浪费。
- Text:被分析并被索引,存储到索引里面。这意味着可以针对这种类型的字段进行搜索,但要注意字段大小。可以类比keyword,区别是这个text会被分析一下,而keyword不会
- 综上,以上filed保证索引的大小!